第4题希尔排序算法又称最小增量排序算法,其基本思想是:
步骤1 :构造一个步长序列delta1、delta2...、deltak ,其中delta1=n/2 ,后面的每个delta是前一个的1/2 , deltak=1;
步骤2 :根据步长序列、进行k趟排序;
步骤3 :对第i趟排序,根据对应的步长delta,将等步长位置元素分组,对同一组内元素在原位置上进行直接插入排序。
【C代码】
下面是算法的C语言实现。
( )常量和变量说明
data:待排序数组data,长度为n,待排序数据记录在data[0]、data[1]、...、data[n-1]中。
n:数组a中的元素个数。
delta:步长数组。
( )C程序
#include
void shellsort(int data[ ], int n){
int *delta,k,i,t,dk,j;
k=n;
delta=(int *)nalloc(sizeof(int)*(n/2));
if(i=0)
do{
( 1 ) ;
delta[i++]=k;
}while ( 2 ) ;
i=0;
while((dk=delta[i])>0){
for(k=delta[i];k if( ( 3 ) ) {
t=data[k];
for(j=k-dk;j>=0&&t data[j+dk]=data[j];
}/*for*/
( 4 ) ; //data[j+dk]=t;
}/*if*/
++i;
}/*while*/
}